Aprende MATLAB en 10 Minutos
MATLAB (Matrix Laboratory) es un lenguaje de programacion de alto nivel y un entorno diseñado para computacion numerica, desarrollo de algoritmos y visualizacion de datos. Originalmente desarrollado a finales de los anos 1970, MATLAB se ha convertido en una herramienta esencial en ingenieria, ciencia y matematicas.
Este tutorial cubre los fundamentos de MATLAB y te ayudara a comenzar con este poderoso entorno de computacion.
1. Tu Primer Programa en MATLAB
Crea un archivo de script llamado hello.m o escribe comandos directamente en la ventana de comandos de MATLAB.
disp('Hello, World!')
O usando la funcion fprintf:
fprintf('Hello, World!\n')
La salida sera:
Hello, World!
La funcion disp() muestra el contenido directamente, mientras que fprintf() ofrece mas control de formato, similar al printf de C.
2. Sintaxis Basica
MATLAB tiene sus propias reglas de sintaxis que difieren de la mayoria de los lenguajes de programacion de proposito general. Comprender estos conceptos basicos es esencial para escribir codigo limpio y mantenible.
2.1 Comentarios
Los comentarios de una sola linea comienzan con el signo de porcentaje %:
% This is a comment
x = 10; % This assigns 10 to x
Los comentarios de multiples lineas usan %{ y %}:
%{
This is a multi-line comment.
It can span multiple lines.
%}
2.2 Punto y coma
El punto y coma ; suppresses output display. Without it, MATLAB muestra el resultado:
x = 5 % Displays: x = 5
y = 10; % No output, but y is assigned
2.3 Sensibilidad a Mayusculas
MATLAB es sensible a mayusculas. A y a son variables diferentes:
A = 5;
a = 10;
disp(A) % Output: 5
disp(a) % Output: 10
2.4 Nombres de Variables
Los nombres de variables deben comenzar con una letra, seguidos de letras, numeros o guiones bajos:
valid_name = 1;
another_valid_name_123 = 2;
% 123invalid = 3; % Error: cannot start with number
2.5 Operaciones Basicas
MATLAB destaca en operaciones matriciales. Crear una matriz es muy facil:
A = [1 2 3; 4 5 6; 7 8 9] % 3x3 matrix
Salida:
A =
1 2 3
4 5 6
7 8 9
3. Variables y Tipos de Datos
MATLAB usa tipado dinamico. Las variables se crean cuando se les asigna un valor y su tipo esta determinado por el valor asignado.
3.1 Tipos Numericos
MATLAB almacena todos los numeros como punto flotante de doble precision de manera predeterminada:
% Integer
int_num = 42;
% Float
float_num = 3.14159;
% Scientific notation
sci_num = 2.5e-3; % 0.0025
3.2 Cadenas
Las variables de cadena usan comillas simples:
str = 'Hello, MATLAB';
str2 = "Hello, MATLAB"; % String array (R2016b+)
Concatenacion de cadenas:
str1 = 'Hello';
str2 = 'World';
combined = [str1 ', ' str2]; % 'Hello, World'
3.3 Logicos (Booleanos)
Los valores logicos son true o false:
flag = true;
result = false;
% Logical operations
a = true;
b = false;
and_result = a && b; % false
or_result = a || b; % true
not_result = ~a; % false
3.4 Arreglos de Caracteres vs Cadenas
MATLAB tiene tanto arreglos de caracteres como objetos de cadena:
% Character array (older style)
char_arr = 'Hello';
% String object (modern style, R2016b+)
str_obj = "Hello";
% String objects are easier to work with
name = "Alice";
greeting = "Hello, " + name; % Works naturally
4. Estructuras de Datos
MATLAB proporciona varias estructuras de datos para diferentes casos de uso.
4.1 Vectores
Un vector es un arreglo unidimensional:
% Row vector
row_vec = [1 2 3 4 5];
% Column vector
col_vec = [1; 2; 3; 4; 5];
% Using colon operator
range_vec = 1:5; % [1 2 3 4 5]
step_vec = 0:2:10; % [0 2 4 6 8 10]
% linspace for evenly spaced values
lin_vec = linspace(0, 10, 5); % [0 2.5 5 7.5 10]
4.2 Matrices
Las matrices son la base de MATLAB:
% Direct matrix creation
A = [1 2 3; 4 5 6; 7 8 9];
% Accessing elements
element = A(2, 3); % Returns 6 (row 2, column 3)
% Matrix operations
B = A'; % Transpose
C = A * B; % Matrix multiplication
D = A .* B; % Element-wise multiplication
4.3 Arreglos de Celdas
Los arreglos de celdas pueden contener diferentes tipos de datos:
% Create a cell array
cell_arr = {1, 'hello', [1 2 3], true};
% Access cell contents using curly braces
data = cell_arr{2}; % Returns 'hello'
% Access cell using parentheses
sub_cell = cell_arr(1:2); % Returns {1, 'hello'}
4.4 Estructuras
Las estructuras son como diccionarios con campos nombrados:
% Create a structure
student.name = 'John';
student.age = 20;
student.major = 'Engineering';
% Access fields
disp(student.name); % Output: John
% Array of structures
students(1).name = 'Alice';
students(1).age = 21;
students(2).name = 'Bob';
students(2).age = 22;
4.5 Tablas
Las tablas son adecuadas para datos tabulares:
% Create a table
Age = [25; 30; 35];
Name = {'Alice'; 'Bob'; 'Charlie'};
Salary = [50000; 60000; 70000];
T = table(Name, Age, Salary);
% Access data
disp(T.Age);
disp(T.Name{1});
5. Operadores
MATLAB proporciona varios operadores para operaciones aritmeticas, comparacion y logicas.
5.1 Operadores Aritmeticos
a = 10;
b = 3;
sum = a + b; % 13
diff = a - b; % 7
prod = a * b; % 30
quot = a / b; % 3.3333
int_div = floor(a/b); % 3
mod = mod(a, b); % 1 (remainder)
pow = a ^ b; % 1000
5.2 Operadores Elemento a Elemento
Los operadores elemento a elemento funcionan en elementos correspondientes:
A = [1 2 3];
B = [4 5 6];
C = A .* B; % Element-wise: [4 10 18]
D = A.^2; % Element-wise square: [1 4 9]
5.3 Operadores de Comparacion
x = 5;
y = 10;
eq = (x == y); % false
neq = (x ~= y); % true
gt = (x > y); % false
lt = (x < y); % true
ge = (x >= y); % false
le = (x <= y); % true
5.4 Operadores Logicos
a = true;
b = false;
and_op = a & b; % false (element-wise AND)
or_op = a | b; % true (element-wise OR)
not_op = ~a; % false
and_short = a && b; % false (short-circuit AND)
or_short = a || b; % true (short-circuit OR)
6. Control de Flujo
MATLAB proporciona estructuras de control de flujo estandar, pero con una sintaxis diferente de lenguajes como Python.
6.1 if-elseif-else
score = 85;
if score >= 90
grade = 'A';
elseif score >= 80
grade = 'B';
elseif score >= 70
grade = 'C';
else
grade = 'F';
end
disp(grade) % Output: B
6.2 switch
La declaracion switch compara una expresion unica contra multiples casos:
day = 'Monday';
switch day
case {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'}
disp('Weekday');
case {'Saturday', 'Sunday'}
disp('Weekend');
otherwise
disp('Invalid day');
end
6.3 Bucles for
El bucle for itera sobre un rango o arreglo:
% Iterating over a range
for i = 1:5
disp(i);
end
% Iterating over an array
fruits = {'apple', 'banana', 'orange'};
for fruit = fruits
disp(fruit{1});
end
% Nested loops for matrix operations
A = [1 2; 3 4];
B = zeros(2, 2);
for i = 1:2
for j = 1:2
B(i, j) = A(i, j) * 2;
end
end
6.4 Bucles while
count = 0;
while count < 5
disp(count);
count = count + 1;
end
6.5 Control de Bucles
La declaracion break sale del bucle, y continue salta a la siguiente iteracion:
% Using break
for i = 1:10
if i == 5
break;
end
disp(i);
end
% Output: 1 2 3 4
% Using continue
for i = 1:5
if mod(i, 2) == 0
continue; % Skip even numbers
end
disp(i);
end
% Output: 1 3 5
7. Entrada y Salida
7.1 Entrada del Usuario
Usa la funcion input() para obtener entrada del usuario:
% Get numeric input
num = input('Enter a number: ');
% Get string input
name = input('Enter your name: ', 's');
% Get expression input (evaluates the input)
expr = input('Enter an expression: ');
7.2 Mostrando Salida
Varias funciones muestran salida:
% disp - simple display
disp('Hello');
disp([1 2 3]);
% fprintf - formatted output
name = 'Alice';
age = 25;
fprintf('Name: %s, Age: %d\n', name, age);
% sprintf - create formatted string
str = sprintf('Value: %.2f', 3.14159);
disp(str);
7.3 Especificadores de Formato
Especificadores de formato comunes en MATLAB:
% %s - string
% %d - integer
% %f - floating point
% %.2f - floating point with 2 decimal places
% %e - scientific notation
fprintf('%d %.2f %e\n', 42, 3.14159, 1000)
% Output: 42 3.14 1.000000e+03
8. Funciones
Las funciones en MATLAB generalmente se definen en archivos separados, pero las funciones anonimas proporcionan creacion de funciones en linea.
8.1 Funciones Anonimas
Las funciones anonimas crean funciones simples sin archivos separados:
% Single input
square = @(x) x^2;
disp(square(5)); % Output: 25
% Multiple inputs
add = @(x, y) x + y;
disp(add(3, 4)); % Output: 7
% Multiple expressions
hypot = @(x, y) sqrt(x^2 + y^2);
disp(hypot(3, 4)); % Output: 5
8.2 Archivos de Funciones
Crea un archivo llamado myfunc.m:
function y = myfunc(x)
y = x^2 + 1;
end
Llama a la funcion:
result = myfunc(5); % Output: 26
8.3 Funciones con Multiples Salidas
function [sum, prod] = calc(x, y)
sum = x + y;
prod = x * y;
end
Llama con multiples salidas:
[s, p] = calc(3, 4);
disp(s); % 7
disp(p); % 12
8.4 Argumentos Variables
Usa varargin y varargout para argumentos variables:
function result = sum_all(varargin)
result = 0;
for i = 1:length(varargin)
result = result + varargin{i};
end
end
% Call with any number of arguments
total = sum_all(1, 2, 3, 4, 5); % Output: 15
9. Archivos de Script
Los scripts son archivos .m que contienen una secuencia de comandos de MATLAB. Operan sobre datos en el espacio de trabajo:
% save as myscript.m
% Calculate statistics for a dataset
data = [1 2 3 4 5 6 7 8 9 10];
mean_val = mean(data);
std_val = std(data);
max_val = max(data);
min_val = min(data);
fprintf('Mean: %.2f\n', mean_val);
fprintf('Std: %.2f\n', std_val);
fprintf('Max: %d\n', max_val);
fprintf('Min: %d\n', min_val);
10. Manejo de Errores
Usa try-catch para manejo de errores:
try
result = risky_operation();
catch ME
fprintf('Error: %s\n', ME.message);
% Handle the error
result = 0;
end
Usando error() para lanzar errores:
function result = divide(a, b)
if b == 0
error('Division by zero is not allowed');
end
result = a / b;
end
11. Operaciones con Archivos
11.1 Guardando y Cargando Datos
% Save variables to file
x = [1 2 3];
y = 'hello';
save('data.mat', 'x', 'y');
% Load variables from file
load('data.mat');
% Save to text file
writematrix(x, 'data.txt');
% Read from text file
data = readmatrix('data.txt');
11.2 Operaciones con Archivos de Texto
% Write to text file
fid = fopen('output.txt', 'w');
fprintf(fid, 'Line 1\n');
fprintf(fid, 'Line 2\n');
fclose(fid);
% Read from text file
fid = fopen('output.txt', 'r');
while ~feof(fid)
line = fgetl(fid);
if ischar(line)
disp(line);
end
end
fclose(fid);
Usando textscan para lectura estructurada:
fid = fopen('data.txt', 'r');
format = '%s %d %f';
C = textscan(fid, format);
fclose(fid);
name = C{1};
age = C{2};
score = C{3};
12. Graficacion
Las capacidades de graficacion de MATLAB son una de sus caracteristicas mas fuertes.
12.1 Graficacion 2D Basica
x = 0:0.1:2*pi;
y = sin(x);
plot(x, y);
xlabel('x');
ylabel('sin(x)');
title('Sine Wave');
grid on;
12.2 Multiples Graficos
x = 0:0.1:2*pi;
% Subplots
subplot(2, 1, 1);
plot(x, sin(x));
title('Sine');
subplot(2, 1, 2);
plot(x, cos(x));
title('Cosine');
12.3 Personalizacion de Graficos
x = 0:0.1:10;
y1 = x;
y2 = x.^2;
plot(x, y1, 'b-', 'LineWidth', 2); % Blue solid line
hold on;
plot(x, y2, 'r--', 'LineWidth', 2); % Red dashed line
hold off;
xlabel('X');
ylabel('Y');
legend('Linear', 'Quadratic');
title('Linear vs Quadratic');
grid on;
12.4 Otros Tipos de Graficos
% Bar chart
bar([1 2 3 4], [10 20 15 25]);
% Histogram
data = randn(1000, 1);
histogram(data, 30);
% Scatter plot
x = rand(100, 1);
y = 2*x + randn(100, 1)*0.1;
scatter(x, y);
